原始值和引用值
两大区别：存储地址不一样，一个存放在堆，一个在栈
原始值不能有属性和方法，引用值才有

现在有一个问题就是，js里有一些原始值能够向引用值一样拿它的属性，属性赋值
<script type="text/javascript">
	var str = 'abc';
	console.log(str.length);//本来str不能有length这个属性
	//js内部给它一个机制,这个隐式包装的过程叫做包装类
	//new String('abc').length; 字符串对象的构造函数，构造一个字符串对象，new String把str包装起来，原来是原始值给包装成一个对象

	var num = 123;
	num.abc = 'abc';
	//new Number(num).abc ='abc'; -->delete 没保留值直接销毁了

	console.log(num.abc);
	//new Number(num).abc;  ———> {}.abc

	var num = new Number(123);
	console.log(num);
	num.abc = 'abc';
	console.log(num.abc);
</script>

<script type="text/javascript">
	Person.prototype.lastName ='lao';//任何函数包括构造函数都有prototype属性，prototype是函数构造出对象的公共祖先
	function Person(){
		//var this ={__proto__ : Person.prototype}
	}
	var person = new Person();
	console.log(person.lastName);
</script>

<script type="text/javascript">
	var demo = {
		lastName : 'lao'
	}

	var obj = Object.create(demo);//创造一个原型为demo的空对象
	//obj = {
	//	__proto__ : demo
	//}
	console.log(obj.lastName);

</script>

<script type="text/javascript">
	//一旦经历了var的操作，所得出的属性，window,这种属性叫做不可配置的属性
	//不可配置的属性delete不掉
	var num = 123;
	delete num;
	console.log(num);
</script>

this
1.预编译 this 指向window
2.谁调用的this指向谁
3.call,apply
4.全局this指向window

<script type="text/javascript">
	function test(){
		console.log(this);
	}
	test();//test.call()
	test.call({name : 'sdf'});//call里第一个值，改变this执行时的环境
	//test() --> AO{
	//	arguments : {}
	//	num : undefined
	//	this : window	---> this : {name : 'sdf'}
	//	test : function test(){}	
	//}


</script>

<script type="text/javascript">
	var name = 'window';
	var obj = {
		name : "obj",
		say : function (){
			console.log(this.name);
		}
	}
	obj.say.call(window);

	var fun = obj.say;//把say函数体给fun
	fun();//执行函数，不是谁调用，走预编译环节，this指向window
	fun.call(obj);//this指向obj
</script>

call的应用
<script type="text/javascript">
	function Person(name,age){
		this.name = name;
		this.age = age;
	}

	function Student(name,age,sex){
		//var this = Object.create(Student.prototype);
		Person.call(this,name,age);//把Person的this改向Student的this，把形参放下来当实参再传到Person里面去
		this.sex = sex;
	}

	var student = new Student('sa',14,'asd');
	console.log(student);
</script>

<script type="text/javascript">
	console.log([] == []);
</script>